from typing import Dict, List, Any, Optional

# 用户相关工具定义
class UserTools:
    def __init__(self, http_client):
        self.http = http_client
    
    def get_user_info(self):
        """获取我的个人信息"""
        print('获取用户详情')
        response = self.http.get('/api.php/v1/user')
        print(response)
        return response
        
    def get_users(self, params: Optional[Dict[str, Any]] = None):
        """获取用户列表"""
        print('获取用户列表')
        response = self.http.get('/api.php/v1/users', params=params)
        print(response)
        return response
        
    def get_user_detail(self, user_id: int):
        """获取指定用户信息"""
        print(f'获取用户ID={user_id}的详情')
        response = self.http.get(f'/api.php/v1/users/{user_id}')
        print(response)
        return response
        
    def update_user(self, user_id: int, data: Dict[str, Any]):
        """修改用户信息"""
        print(f'修改用户ID={user_id}的信息')
        response = self.http.put(f'/api.php/v1/users/{user_id}', json=data)
        print(response)
        return response
        
    def delete_user(self, user_id: int):
        """删除用户"""
        print(f'删除用户ID={user_id}')
        response = self.http.delete(f'/api.php/v1/users/{user_id}')
        print(response)
        return response
        
    def create_user(self, data: Dict[str, Any]):
        """创建用户"""
        print('创建新用户')
        response = self.http.post('/api.php/v1/users', json=data)
        print(response)
        return response
    
    # 用于注册工具到MCP
    def register(self, mcp_instance):
        """
        将所有工具注册到MCP实例
        
        Args:
            mcp_instance: FastMCP实例
        """
        mcp_instance.add_tool(self.get_user_info, name="get_user_info", description="获取当前登录用户的个人信息。无需参数，直接调用即可获取当前登录用户详情。")
        
        mcp_instance.add_tool(self.get_users, name="get_users", description="获取用户列表。参数：可选params(Dict)包含筛选条件如limit(每页数量)、page(页码)、sort(排序字段)、order(排序方式asc/desc)、name(按姓名搜索)等。可通过调用而不传参数获取所有用户列表。")
        
        mcp_instance.add_tool(self.get_user_detail, name="get_user_detail", description="获取指定用户的详细信息。参数：user_id(int，必填)用户ID。可以从get_users方法返回的列表中获取用户ID。")
        
        mcp_instance.add_tool(self.update_user, name="update_user", description="修改指定用户信息。参数：user_id(int，必填)要修改的用户ID；data(Dict，必填)包含要更新的字段，如realname(真实姓名)、gender(性别f/m)、mobile(手机号)等。用户ID可从get_users获取，现有用户信息可从get_user_detail获取。")
        
        mcp_instance.add_tool(self.delete_user, name="delete_user", description="删除指定用户。参数：user_id(int，必填)要删除的用户ID。用户ID可从get_users方法返回的列表中获取。需要管理员权限。")
        
        mcp_instance.add_tool(self.create_user, name="create_user", description="创建新用户。参数：data(Dict，必填)包含用户信息，必须字段有account(用户名)、password(密码)、realname(真实姓名)，可选字段如dept(部门ID，可从get_depts获取)、role(角色)、gender(性别f/m)、email(邮箱)等。需要管理员权限。")
